/**
/**
 * @ Authors:
 * 
 * @Veronique De Laet
 * @Johan Willems
 * @Pierre Delaere
 * 
 * @version 2011
 */
package controller;

import java.io.FileNotFoundException;

//import java.util.Collection;
import java.util.Formatter;
import java.util.FormatterClosedException;
import java.util.HashSet;
//import java.util.HashMap;
import java.util.Iterator;
import java.util.NoSuchElementException;

import model.AangebodenCursus;
import model.Cursist;
import model.Cursus;
import model.CursusHistoriek;
import model.HerscholingCursist;
import model.Lector;
import model.Inschrijving;
import model.VrijeCursist;
import model.container.Cursisten;
import model.container.Cursussen;
import model.container.Lectoren;
import model.container.AangebodenCursussen;
import model.container.Inschrijvingen;


/**

 */
public class AfsluitController {
	
	private Formatter outputFile;
	

	public void openOutputFile(String bestand)
	{
		try 
		{
			outputFile = new Formatter(bestand);
		} 
		catch (FileNotFoundException e) 
		{
			e.printStackTrace();
		}
	}
	
	public void addLectorRecords ()
	{
		Iterator<?> lectorenIterator = Lectoren.lectorenLijst.values().iterator();
		Lector deLector;
		while (lectorenIterator.hasNext()) {
			deLector = (Lector)lectorenIterator.next();
			try
			{
				outputFile.format("%s\t%s\t%s\r\n", deLector.getLectorCode(),deLector.getLectorNaam(),deLector.getAantalGewensteUren());
			}
			catch (FormatterClosedException e)
			{
				
			}
			catch (NoSuchElementException e)
			{
				System.err.println(e);
			}
		}
		
	}

	public void addCursusRecords() 
	{
		String cursusLijn;
		Iterator<?> cursussenIterator = Cursussen.cursusLijst.values().iterator();
		Cursus deCursus;
		while (cursussenIterator.hasNext()) {
			deCursus = (Cursus)cursussenIterator.next();
			cursusLijn = String.format("%s\t%s\t%s\t%s\t%s\t%s\r\n",deCursus.getCursusCode()
																   ,deCursus.getCursusNaam()
																   ,deCursus.getStudiePunten()
																   ,deCursus.getLestijdPerWeek()
																   ,deCursus.getOpleiding().ordinal()
																   ,deCursus.getLector().getLectorCode());
			try
			{
				outputFile.format(cursusLijn);
			}
			catch (FormatterClosedException e)
			{
				System.err.println(e);
			}
			catch (NoSuchElementException e)
			{
				System.err.println(e);
			}
		}
	}

	
	public void addAangebodenCursusRecords ()
	{
		String aangebodenCursusLijn;
		Iterator<?> aangebodenCursussenIterator = AangebodenCursussen.aangebodenCursusLijst.values().iterator();
		AangebodenCursus deAangebodenCursus;
		while (aangebodenCursussenIterator.hasNext()){
			deAangebodenCursus = (AangebodenCursus)aangebodenCursussenIterator.next();
			aangebodenCursusLijn = String.format("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\r\n", deAangebodenCursus.getCursusCode(),
		               																	deAangebodenCursus.getLokaal().ordinal(),
		           																		deAangebodenCursus.getAantalPlaatsen(),
																		               deAangebodenCursus.getTijdsMoment().getDag().ordinal(),
																		               deAangebodenCursus.getTijdsMoment().getStartUur(),
																		               deAangebodenCursus.getTijdsMoment().getStartMinuten(),
																		               deAangebodenCursus.getTijdsMoment().getDuurTijd(),
																		               deAangebodenCursus.getLectorCode());
			try
			{
				outputFile.format(aangebodenCursusLijn);
			}
			catch (FormatterClosedException e)
			{
				System.err.println(e);
			}
			catch (NoSuchElementException e)
			{
				System.err.println(e);
			}
		}	
	}
	
	
	public void addCursistRecords ()
	{
		String cursistLijn;
		String cursistType;
		Iterator<?> cursistIterator = Cursisten.cursistenLijst.values().iterator();
		Cursist deCursist;
		HerscholingCursist hCursist = null;
		VrijeCursist vCursist = null;
		String cursistInfo = "";
		String cursistExtra= "";
		while ( cursistIterator.hasNext()) {
			deCursist = (Cursist)cursistIterator.next();
			cursistType = deCursist.getClass().getName();
			cursistLijn = String.format("%s\t%s", deCursist.getCursistNummer(), 
														          deCursist.getNaam());
			if (cursistType == "model.Cursist") {
				cursistInfo = "0\t";
				cursistExtra = "";
			}
			if (cursistType == "model.HerscholingCursist") {
				cursistInfo = "1\t";
				hCursist = (HerscholingCursist) deCursist;
				cursistExtra = String.format("\t%s\t%s", hCursist.getHoogsteDiploma(),hCursist.getRedeHerscholing());
			}
			if (cursistType == "model.VrijeCursist") {
				cursistInfo = "2\t";
				vCursist = (VrijeCursist)deCursist;
				cursistExtra = String.format("\t%s", vCursist.getNationaliteit());
			}
			cursistLijn = cursistInfo + cursistLijn + cursistExtra + "\r\n";
			try
			{
				outputFile.format(cursistLijn);
			}
			catch (FormatterClosedException e)
			{
				System.err.println(e);
			}
			catch (NoSuchElementException e)
			{
				System.err.println(e);
			}
		}
	}
	
	public void addInschrijvingRecords ()
	{
		String InschrijvingLijn;
		Iterator<?> inschrijvingIterator = Inschrijvingen.inschrijvingsLijst.iterator();
		Inschrijving deInschrijving;
		while ( inschrijvingIterator.hasNext()) {
			deInschrijving = (Inschrijving)inschrijvingIterator.next();
			InschrijvingLijn = String.format("%s\t%s\t%s\r\n", deInschrijving.getDate().getDatumInEuropeesFormaat(),
														   deInschrijving.getCursist().getCursistNummer());
														   deInschrijving.getAangebodenCursus().getCursusCode();
			try
			{
				outputFile.format(InschrijvingLijn);
			}
			catch (FormatterClosedException e)
			{
				System.err.println(e);
			}
			catch (NoSuchElementException e)
			{
				System.err.println(e);
			}
		}
	}
		
	public void addHistoriekRecords ()
	{
		Cursist deCursist;
		HashSet<CursusHistoriek> deHistoriekSet;
		String historiekLijn = null;
		Iterator<?> cursistIterator = Cursisten.cursistenLijst.values().iterator();
		while ( cursistIterator.hasNext()) 
		{
			deCursist = (Cursist)cursistIterator.next();
			deHistoriekSet = deCursist.cursusHisto;
			for (CursusHistoriek historiek : deHistoriekSet)
			{
				historiekLijn = String.format("%s\t%s\t%s\t%s\r\n",historiek.getCursist()
																  ,historiek.getSchooljaar()
																  ,historiek.getScore()
																  ,historiek.getCursus());
				try
				{
					outputFile.format(historiekLijn);
				}
				catch (FormatterClosedException e)
				{
					System.err.println(e);
				}
				catch (NoSuchElementException e)
				{
					System.err.println(e);
				}
			}
		}
	}
		
	public void closeOutputFile()
	{
		if(outputFile != null)
			outputFile.close();
	}
}
